package com.cskaoyan.javase.oop3._1interface._4example.controller.impl;

import com.cskaoyan.javase.oop3._1interface._4example.controller.IGoodsController;
import com.cskaoyan.javase.oop3._1interface._4example.dao.IGoodsDao;
import com.cskaoyan.javase.oop3._1interface._4example.dao.impl.IGoodsDaoImpl;
import com.cskaoyan.javase.oop3._1interface._4example.model.Goods;

/**
 * 用于对外提供商品业务处理的服务
 * 任何想要对商品进行业务的需求，都需要本类对象来完成
 *
 * @since 09:28
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class IGoodsControllerImpl implements IGoodsController {
    // 依赖于Dao层下的GoodsDao对象来完成数据处理
    // 为了体现接口制定标准规范的作用,应该用接口的引用指向它的实现类对象,因为这样接口的引用限制了实现类对象的访问范围,这样写以后,接口中不存在的方法,就不能访问了.
    private IGoodsDao ig = new IGoodsDaoImpl();

    /**
     * 将装有全部商品对象的数组返回，要求过滤null元素
     * @return com.cskaoyan.javase.oop3._1interface.interfacedemo.model.Goods[]
     * @author wuguidong@cskaoyan.onaliyun.com
     * @since 2022/08/27 9:35
     */
    @Override
    public Goods[] getAllRealGoods() {
        return ig.getAllRealGoods();
    }

    /**
     * 新增商品,规定该方法返回:
     *      a.返回0,表示插入成功
     *      b.返回1,表示传入的ID重复,插入失败
     *      c.返回2,表示数组满了,没有null的位置了,插入失败
     *
     * @param id 要新增商品的id
     * @param name 要新增商品的name
     * @param brand 要新增商品的brand
     * @param price 要新增商品的price
     * @return int
     * @author wuguidong@cskaoyan.onaliyun.com
     * @since 2022/08/27 9:56
     */
    @Override
    public int creatGoods(int id, String name, String brand, double price) {
        // 1.先校验传入的id是否重复,如果重复返回1
        // 规定该方法返回true表示重复,false表示不重复
        if (ig.judgeIdRepeat(id)) {
            return 1;
        }
        // 2.在id不重复的前提下,尝试插入该商品,根据不同的结果,返回不同的状态码
        // 创建出商品对象
        Goods goodsInsert = new Goods(id, name, brand, price);
        // 这时的插入,要么成功返回true,要么插入失败数组满了,返回false
        if (ig.createGoodsByIdNotRepeat(goodsInsert)) {
            return 0;
        }
        return 2;
    }
}
